package in.lib.adapter;
import in.lib.Constants;
import in.lib.adapter.base.RobinAdapter;
import in.lib.helper.AnimationHelper;
import in.lib.holder.ChannelHolder;
import in.lib.manager.APIManager;
import in.lib.manager.SettingsManager;
import in.lib.view.LinkifiedTextView;
import in.model.Channel;
import in.model.User;
import in.rob.client.ProfileActivity;
import in.rob.client.R;
import in.rob.client.dialog.NewMessageDialog;
import in.rob.client.dialog.base.DialogBuilder;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
public class ChannelAdapter extends RobinAdapter implements OnLongClickListener
{
@Getter private final Context context;
@Getter private final LayoutInflater layoutInflater;
private int mLastPositionAnimated = 5;
public ChannelAdapter(Context context, List<Channel> items)
{
super(context, items, Order.DESC);
this.context = context;
this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override public View getView(int position, View convertView, ViewGroup parent)
{
super.getView(position, convertView, parent);
Channel channel = (Channel)getItem(position);
ChannelHolder currentHolder;
if (convertView == null)
{
convertView = this.layoutInflater.inflate(R.layout.channel_list_item, parent, false);
currentHolder = new ChannelHolder(convertView);
convertView.setTag(R.id.TAG_VIEW_HOLDER, currentHolder);
currentHolder.avatarContainer.setOnClickListener(this);
}
else
{
currentHolder = (ChannelHolder)convertView.getTag(R.id.TAG_VIEW_HOLDER);
}
currentHolder.populate(channel, this);
int avatarCount = channel.getReaders().size();
for (int index = 0; index < avatarCount; index++)
{
if (currentHolder.avatarContainer == null || currentHolder.avatarContainer.getChildAt(index) == null) continue;
currentHolder.avatarContainer.getChildAt(index).setTag(position);
currentHolder.avatarContainer.getChildAt(index).setOnClickListener(this);
currentHolder.avatarContainer.getChildAt(index).setOnLongClickListener(this);
}
if (currentHolder.avatarContainer != null)
{
currentHolder.avatarContainer.setTag(position);
}
/**
* Set the animation if it hasn't been played
*/
if (mLastPositionAnimated < position && (isAnimationsEnabled() && SettingsManager.isListAnimationEnabled()))
{
AnimationHelper.slideUp(convertView);
}
if (position > mLastPositionAnimated)
{
mLastPositionAnimated = position;
}
return convertView;
}
@Override public void onClick(View v)
{
if (v.getId() == R.id.avatar_container)
{
getListView().performItemClick(v.getRootView(), (Integer)v.getTag() + getListView().getHeaderViewsCount(), 0);
}
else if (v.getId() == R.id.avatar)
{
getListView().performItemClick(v.getRootView(), (Integer)v.getTag() + getListView().getHeaderViewsCount(), 0);
}
}
@Override public boolean onLongClick(View v)
{
// if (v.getId() == R.id.avatar)
// {
// String userId = (String)v.getTag(R.id.TAG_USER_ID);
// User u = User.loadUser(userId);
// ((AvatarView)v).triggerLongPress(u);
//
// return true;
// }
return false;
}
@Override public boolean onItemLongClick(AdapterView arg0, View v, int position, long arg3)
{
// weird conflicts with LinkifiedTextView on Jelly Bean
if (v instanceof LinkifiedTextView)
{
return false;
}
final Channel channel = (Channel)getItem(position - getListView().getHeaderViewsCount());
String subscribeText = channel.isSubscribed() ? getContext().getString(R.string.unsubscribe) : getContext().getString(R.string.subscribe);
CharSequence[] options = {getContext().getString(R.string.new_message), getContext().getString(R.string.subscribers), subscribeText};
DialogBuilder.create(getContext())
.setTitle(R.string.pick_option)
.setItems(options, new OnClickListener()
{
@Override public void onClick(DialogInterface dialog, int which)
{
if (which == 0)
{
Intent messageDialog = new Intent(getContext(), NewMessageDialog.class);
messageDialog.putExtra(Constants.EXTRA_CHANNEL_ID, channel.getId());
messageDialog.putExtra(Constants.EXTRA_CHANNEL_NAME, channel.getTitle());
messageDialog.putExtra(Constants.EXTRA_IS_PUBLIC, channel.isPublic());
getContext().startActivity(messageDialog);
}
else if (which == 1)
{
final ArrayList<User> loadedUsers = new ArrayList<User>();
for (String s : channel.getReaders())
{
User u = User.loadUser(s);
if (u != null)
{
loadedUsers.add(u);
}
}
DialogBuilder.create(getContext())
.setTitle(R.string.subscribers)
.setAdapter(new AccountAdapter(getContext(), R.layout.user_dialog_list_item, loadedUsers), new DialogInterface.OnClickListener()
{
@Override public void onClick(DialogInterface dialog, int which)
{
Intent profileIntent = new Intent(getContext(), ProfileActivity.class);
profileIntent.putExtra(Constants.EXTRA_USER, loadedUsers.get(which));
getContext().startActivity(profileIntent);
dialog.dismiss();
}
})
.setNegativeButton(R.string.close, null)
.show();
}
else if (which == 2)
{
if (channel.isSubscribed())
{
channel.setSubscribed(false);
APIManager.getInstance().unsubscribeChannel(channel.getId(), null);
}
else
{
channel.setSubscribed(true);
APIManager.getInstance().subscribeChannel(channel.getId(), null);
}
}
}
})
.show();
return true;
}
}